/**
 *    Copyright 2009-2015 the original author or authors.
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */
package org.apache.ibatis.type;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * @author Clinton Begin
 */
//当我们在javabean中自定义了枚举类型或者其它某个类型，但是在数据库中存储时往往需要转换成数据库对应的类型，并且在从数据库中取出来时也需要将数据库类型转换为javabean中的对应类型。比如：javabean中字段类型为Date，数据库中存储的是varchar类型；javabean中字段类型是Enum，数据库中存储的是String或者Integer。
//因为有大量类似数据的转换，手动转换类型进行存储和查询已经过于麻烦。MyBatis为我们提供了解决办法：TypeHandler类型处理器。

//  MyBatis 中的 TypeHandler 类型处理器用于 JavaType 与 JdbcType 之间的转换，
// 用于 PreparedStatement 设置参数值和从 ResultSet 或 CallableStatement 中取出一个值。
public interface TypeHandler<T> {//负责java数据类型和jdbc数据类型之间的映射和转换
  //interface
  void setParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException;//PreparedStatement根据下标设置参数类型

  T getResult(ResultSet rs, String columnName) throws SQLException;//将数据库的数值转换为相应的JavaType类型

  T getResult(ResultSet rs, int columnIndex) throws SQLException;//将数据库的数值转换为相应的JavaType类型

  T getResult(CallableStatement cs, int columnIndex) throws SQLException;//将数据库的数值转换为相应的JavaType类型

}
